package letcode.oneQuestionPerDay._202003._20200321;

/**
 * @author 许群星
 * @decription  水壶问题
 * @data 2020/3/218:20
 **/
public class WaterAndJugProblem {
    public static void main(String[] args) {
//        int x=3,y=5,z=4;
//        int x=2,y=6,z=5;
        int x=11,y=13,z=3;
        System.out.println(canMeasureWater(x,y,z));
    }
    //提供方法
    public static boolean canMeasureWater(int x, int y, int z) {
        int between=y-x;
        //边缘情况
        if (x==0){
            if (y==z)
                return true;
            else if (z==0)
                return true;
            else
                return false;
        }
        if (y==0){
            if (x==z)
                return true;
            else if (z==0)
                return true;
            else
                return false;
        }
        if (between==0){
            if (z==x)
                return true;
            else if (z==0)
                return true;
            else
                return false;
        }
        //z能整除差
        if (z%between==0)
            return true;

        //x和z的差值能整除between
        if ((x-z)%between==0||(y-z)%between==0)
            return true;

        //余数或者差余数加上其中一项等于z
        if (x>y){
            if ((x%y+y)==z|| ((y-x%y)+y)==z||(x%y+x)==z|| ((y-x%y)+x)==z)
                return true;
            else
                return false;
        }else {
            if ((y%x+x)==z|| ((x-y%x)+x)==z||(y%x+y)==z|| ((x-y%x)+y)==z)
                return true;
            else
                return false;
        }


    }
}
/*
有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶，从而可以得到恰好 z升 的水？

如果可以，最后请用以上水壶中的一或两个来盛放取得的 z升 水。

你允许：

装满任意一个水壶
清空任意一个水壶
从一个水壶向另外一个水壶倒水，直到装满或者倒空
示例 1: (From the famous "Die Hard" example)

输入: x = 3, y = 5, z = 4
输出: True
示例 2:

输入: x = 2, y = 6, z = 5
输出: False
 */